package util;

import entity.BaseHead;
import entity.enums.HikDeviceStatus;
import entity.enums.HikLiftStatus;
import global.Global;
import global.InitCache;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

/**
 * 动作处理器
 *
 * @author zhouwz
 * @date 2020/11/26 16:45
 */
public class ActionProcessor {

    /**
     * 通用移动部分初始化目标对象(举升状态默认未知状态)
     *
     * @param baseHead 解码过的头部信息
     */
    public static void commonMovePartInit(BaseHead baseHead) {
        commonMovePartInit(baseHead, HikLiftStatus.UNKNOWN);
    }

    /**
     * 通用移动部分初始化目标对象(自定义举升状态)
     *
     * @param baseHead      解码过的头部信息
     * @param hikLiftStatus 当前举升状态
     */
    public static void commonMovePartInit(BaseHead baseHead, HikLiftStatus hikLiftStatus) {
        ByteBuf pickBuff = Unpooled.copiedBuffer(baseHead.getData(), Global.HEAD_SIZE, baseHead.getLen() - Global.HEAD_SIZE);
        pickBuff.skipBytes(4);
        InitCache.realtimeStatus.setTaskId(pickBuff.readShort());
        InitCache.realtimeStatus.setSubTaskId(pickBuff.readByte());
        pickBuff.skipBytes(21);
        // 赋值目标作为信息,由移动线程进行计算移动
        InitCache.vehicleTargetInfo.setX(pickBuff.readInt());
        InitCache.vehicleTargetInfo.setY(pickBuff.readInt());
        InitCache.realtimeStatus.setAngle(pickBuff.readInt());
        InitCache.realtimeStatus.setHikLiftStatus(hikLiftStatus);
        // 收到指令后就开始执行中
        InitCache.realtimeStatus.setHikDeviceStatus(HikDeviceStatus.STATUS_3);
    }
}
